package org.smartly.application.desktopgap.impl.app.utils.fx;
import javafx.event.EventHandler;
import javafx.scene.Cursor;
import javafx.scene.Node;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
/**
*
*/
public class Draggable {
private static final Cursor DRAGGABLE = Cursor.MOVE;
private static final Cursor DRAGGING = Cursor.DEFAULT;
private double initialX;
private double initialY;
public Draggable(final Node node) {
addDraggableNode(node);
}
// ------------------------------------------------------------------------
// p r i v a t e
// ------------------------------------------------------------------------
private void addDraggableNode(final Node node) {
if (null == node) {
return;
}
node.setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override
public void handle(final MouseEvent me) {
node.setCursor(DRAGGABLE);
}
});
node.setOnMouseReleased(new EventHandler<MouseEvent>() {
@Override
public void handle(final MouseEvent me) {
node.setCursor(DRAGGABLE);
}
});
node.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(final MouseEvent me) {
try {
if (me.getButton() != MouseButton.MIDDLE) {
node.setCursor(DRAGGING);
initialX = me.getSceneX();
initialY = me.getSceneY();
}
} catch (Throwable ignored) {
}
}
});
node.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override
public void handle(final MouseEvent me) {
try {
if (me.getButton() != MouseButton.MIDDLE) {
node.getScene().getWindow().setX(me.getScreenX() - initialX);
node.getScene().getWindow().setY(me.getScreenY() - initialY);
node.setCursor(DRAGGING);
}
} catch (Throwable ignored) {
}
}
});
}
}